import express from 'express'
import cors from 'cors'
import path from 'path'
import { fileURLToPath } from 'url'
import fs from 'fs'

const app = express()
const PORT = 3001

const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)

// 模拟用户数据库
const users = [
    {
        id: 1,
        username: 'admin',
        password: '123456',
        email: 'admin@example.com',
        role: 'admin',
        avatar: '/avatars/default.png'
    },
    {
        id: 2,
        username: 'user1',
        password: '123456',
        email: 'user1@example.com',
        role: 'user'
    }
]
// 确保头像目录存在
const avatarsDir = path.join(__dirname, 'public', 'avatars')
if (!fs.existsSync(avatarsDir)) {
    fs.mkdirSync(avatarsDir, { recursive: true })
}

// 静态文件服务（让前端可以访问上传的头像）
app.use('/public', express.static(path.join(__dirname, 'public')))

// 头像上传接口
app.post('/api/auth/upload-avatar', (req, res) => {
    // 这里简化处理，实际应该使用 multer 等中间件处理文件上传
    // 模拟上传成功
    const userId = 1 // 模拟用户ID
    const avatarUrl = `/public/avatars/avatar-${userId}-${Date.now()}.png`

    // 在实际项目中，这里应该：
    // 1. 接收上传的文件
    // 2. 验证文件类型和大小
    // 3. 保存文件到服务器
    // 4. 更新用户头像URL

    // 模拟更新用户头像
    const user = users.find(u => u.id === userId)
    if (user) {
        user.avatar = avatarUrl
    }

    res.json({
        success: true,
        message: '头像上传成功',
        data: {
            avatarUrl: avatarUrl
        }
    })
})

// 更新获取用户信息接口，返回头像
app.get('/api/auth/user-info', (req, res) => {
    const user = users[0] // 模拟用户

    res.json({
        success: true,
        data: {
            id: user.id,
            username: user.username,
            email: user.email,
            role: user.role,
            avatar: user.avatar // 返回头像URL
        }
    })
})

app.use(cors())
app.use(express.json())

// 登录接口
app.post('/api/auth/login', (req, res) => {
    const { username, password } = req.body
    console.log('登录请求:', { username, password })

    const user = users.find(u => u.username === username && u.password === password)

    if (!user) {
        return res.status(401).json({
            success: false,
            message: '用户名或密码错误'
        })
    }

    res.json({
        success: true,
        message: '登录成功',
        data: {
            token: 'mock-jwt-token-' + user.id, // 简化版，先不用真正的JWT
            user: {
                id: user.id,
                username: user.username,
                email: user.email,
                role: user.role
            }
        }
    })
})

// 修改密码接口
app.post('/api/auth/change-password', (req, res) => {
    const { currentPassword, newPassword } = req.body
    console.log('修改密码请求:', { currentPassword, newPassword })

    // 模拟用户（在实际项目中应该根据token识别用户）
    const user = users[0]

    if (user.password !== currentPassword) {
        return res.status(400).json({
            success: false,
            message: '当前密码错误'
        })
    }

    if (newPassword.length < 6) {
        return res.status(400).json({
            success: false,
            message: '新密码长度不能少于6位'
        })
    }

    // 更新密码
    user.password = newPassword
    console.log('密码更新成功，新密码:', newPassword)

    res.json({
        success: true,
        message: '密码修改成功'
    })
})

// 获取用户信息接口
app.get('/api/auth/user-info', (req, res) => {
    // 模拟用户（在实际项目中应该根据token识别用户）
    const user = users[0]

    res.json({
        success: true,
        data: {
            id: user.id,
            username: user.username,
            email: user.email,
            role: user.role
        }
    })
})

// 健康检查接口
app.get('/api/health', (req, res) => {
    res.json({
        success: true,
        message: '服务器运行正常',
        timestamp: new Date().toISOString()
    })
})

app.listen(PORT, () => {
    console.log(`✅ 后端服务器运行在 http://localhost:${PORT}`)
    console.log(`📝 可用接口:`)
    console.log(`   POST http://localhost:${PORT}/api/auth/login`)
    console.log(`   POST http://localhost:${PORT}/api/auth/change-password`)
    console.log(`   GET  http://localhost:${PORT}/api/auth/user-info`)
    console.log(`   GET  http://localhost:${PORT}/api/health`)
})